﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using QuizAppMvc2.Models;
using System.Data.Objects;
using System.Web.Security;

namespace QuizAppMvc2.Bll
{
    public class Wrapper
    {
        private quizdbEntities _db = new quizdbEntities();

        public ResumoModels ProcessTest(Models.AvaliacaoModels avaliacao)
        {
            int resultado;
            quizdbEntities ctx = new quizdbEntities();


            Prova prova = new Prova()
            {
                //MembershipUser user = Membership.GetUser();
                idUsuario = Singleton.Instance.GetUserId(),
            };
           

            ResumoModels resumo = new ResumoModels();
            foreach (ProvaQuestao provaQuestao in avaliacao.questoes)
            {
                ctx.ProvaQuestaos.AddObject(provaQuestao);
                provaQuestao.QuestaoReference.Load();

                resultado = 0;

                if (provaQuestao.Resultado == 0)
                {
                    
                    resumo.respostaembranco.Add(provaQuestao.Questao.idQuestao);
                }
                else
                {
                    if (provaQuestao.Questao is QuestaoSimple)
                    {
                        QuestaoSimple questaoSimple = provaQuestao.Questao as QuestaoSimple;

                        if (provaQuestao.Resultado == questaoSimple.Gabarito)
                        {
                            resultado++;
                            
                            resumo.respostacertas.Add(provaQuestao.Questao.idQuestao);
                        }
                        else
                        {
                            resumo.respostaerradas.Add(provaQuestao.Questao.idQuestao);
                            
                        }
                    }

                    else if (provaQuestao.Questao is QuestaoMultipla)
                    {
                        QuestaoMultipla questaoMultipla = provaQuestao.Questao as QuestaoMultipla;
                        if (questaoMultipla.Gabarito == provaQuestao.Resultado)
                        {
                            resultado++;
                            
                            resumo.respostacertas.Add(provaQuestao.Questao.idQuestao);
                        }
                        else
                        {
                            resumo.respostaerradas.Add(provaQuestao.Questao.idQuestao);
                            
                        }
                    }
                    provaQuestao.Resultado = resultado;
                }
                prova.ProvaQuestaos.Add(provaQuestao);
            }

            resumo.total = resumo.respostacertas.Count + resumo.respostaembranco.Count + resumo.respostaerradas.Count;
            prova.Total = resumo.total;
            prova.DataProva = DateTime.Now;

            ctx.AddToProvas(prova);
            ctx.SaveChanges();
            return resumo;
        }
    }
}